//
//  main.m
//  04-集合（2）
//
//  Created by 韩旭 on 16/7/7.
//  Copyright © 2016年 基础. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "ContactManger.h"
int main(int argc, const char * argv[]) {
#pragma mark -
#if 0
    {
        // 1.字典
        // 存储键值对,存储数据没有顺序,通过key存储,查询value
        // 1>初始化
        // 字典中只能存放对象类型(NSObject子类)
        // 如果出现汉字,代码提示一定会失效
        NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"李四", @"name", [NSNumber numberWithInt: 18], @"age", nil];
        // 2>构造器
        NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"李四", @"name", [NSNumber numberWithInt: 18], @"age", nil];
        // 3>字面量,推荐使用字面量
        NSDictionary *dictionary = @{@"name": @"含蓄",
                                     @"age": @(-18)};
        // 4>取值
        //  <1>取value
        NSString *name = [dictionary objectForKey:@"name"];
        //  <2>取所有的key和value
        // Keys和Values是复数,大概是数组
        NSArray *allKeys = dictionary.allKeys;
        NSArray *allValues = dictionary.allValues;
        //  <3>count
        NSUInteger count = dictionary.count;

        //  <4>通过一个key数组取到对应value的数组,如没有找到,那没有找到的元素类型为NSString类型
        NSArray *allValueArray = [dictionary objectsForKeys:@[@"age"] notFoundMarker:[NSString class]];
        NSLog(@"%@", allValueArray);
        //  <5>相同value的所有key的数组
        NSArray *keyArray = [dic1 allKeysForObject:@"含蓄"];
        NSLog(@"%@", keyArray);
        //  <6>语法糖取值
        NSLog(@"%@", dic[@"name"]);
        
        // 可变字典 NSMutableDictionary, 不推荐使用字面量
        NSMutableDictionary *mutableDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"含蓄", @"name", nil];
        NSMutableDictionary *mutatleDic1 = [@{} mutableCopy];   // 不推荐这样写
        
        // 增 删 改
        // 1>添加:如果key值已经存在,会将之前的value覆盖
        // 字典中的key不要重复,如果重复,会以最后的value进行赋值
        [mutableDic setObject:@"起名好难" forKey:@"name"];
        NSLog(@"%@", mutableDic);
        // 2>删除
        [mutableDic removeObjectForKey:@"name"];
        [mutableDic removeAllObjects];
        NSLog(@"%@", mutableDic);
        // 3>语法糖
        mutableDic[@"name"] = @"历程";    // 相当于setObject:forKey:
    }
#endif
    
#pragma mark -
#if 0
    {
        //        需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
        //        2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
        //        3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
        //        4、删除某个分组的全部联系人。
        Contact *contact = [[Contact alloc] initWithName:@"小王" PhotoNumber:@"110"];
        //        Contact *contact2 = [[Contact alloc] initWithName:@"小黑" PhotoNumber:@"153"];
        //        Contact *contact3 = [[Contact alloc] initWithName:@"小龙" PhotoNumber:@"sb"];
        contact.groupName = @"X";
        [contact showContact];
        NSMutableDictionary *dicMutables = [NSMutableDictionary dictionary];
        //        key : A~Z value : NSMutableArray
        //        判断名字和手机号是不是空值
        if ([contact.name isEqualToString:@""] && [contact.phoneNumber isEqualToString:@""]) {
            //            否则添加失败
            NSLog(@"添加失败");
        } else {
            //          都不是空值可以添加
            //            通过联系人的分组名, 取到对应的分组数组
            NSMutableArray *contactArr = [dicMutables objectForKey:contact.groupName];
            //            判断数组是否存在
            if (contactArr.count == 0) {
                //                数组不存在, 创建数组
                contactArr = [NSMutableArray array];
                [contactArr addObject:contact];
                [dicMutables setObject:contactArr forKey:contact.groupName];
            } else {
                //                 数组存在, 直接添加
                [contactArr addObject:contact];
            }
            NSLog(@"添加成功");
        }
    }
#endif
#pragma mark - 联系（）
#if 0
    { //        需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
        //        2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
        //        3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
        //        4、删除某个分组的全部联系人。
        Contact *contact = [[Contact alloc] initWithName:@"小王" PhotoNumber:@"110"];
        Contact *contact1 = [[Contact alloc] initWithName:@"小李" PhotoNumber:@"110"];
        Contact *contact2 = [[Contact alloc] initWithName:@"小红" PhotoNumber:@"110"];
        Contact *contact3 = [[Contact alloc] initWithName:@"小名" PhotoNumber:@"110"];
        //        Contact *contact2 = [[Contact alloc] initWithName:@"小黑" PhotoNumber:@"153"];
        //        Contact *contact3 = [[Contact alloc] initWithName:@"小龙" PhotoNumber:@"sb"];
        contact.groupName  = @"X";
        contact1.groupName = @"L";
        contact2.groupName = @"H";
        contact3.groupName = @"M";
        //        [contact showContact];
        NSMutableDictionary *dicMutables = [NSMutableDictionary dictionary];
        ContactManger *contactManger = [[ContactManger alloc] initWithDictionary:dicMutables];
        [contactManger addContact:contact];
        [contactManger addContact:contact1];
        [contactManger addContact:contact2];
        [contactManger addContact:contact3];
        NSLog(@"sdfdf%@", contactManger.dicManger);
        //        2.集合
        //        不可变 NSSet 可变 NSMutableSet
        //        1> 初始化
        //       集合会删除掉重复的内容(互异性)
        //        要删除数组或者字典中重复的内容, 放入集合中
        NSSet *set = [[NSSet alloc] initWithObjects:@"小比",@"小王", nil];
        NSLog(@"%@",set);
        //        2> 构造器
        NSSet *setObject = [NSSet setWithObjects:@"雨涵",@"雨涵", nil];
        NSLog(@"%@",setObject);
        //        3> 没有提供集合的字面量
        //        取值
        //        从集合中取出任意元素
        [set anyObject];
        //        count
        //        NSUInteger count = set.count;
        //      集合去重（删除掉数组中重复的元素）
        NSArray *repeatArray = @[@10, @20, @30, @10, @30, @100];
        NSSet *repeatSet = [NSSet setWithArray:repeatArray];
        NSLog(@"%@", repeatSet);
        NSLog(@"%@", repeatArray);
        //        可变集合NSMutableSet
        //        1> 初始化与不可变集合一样
        //        2> 取值 anyObject
        //        3> 可变集合 可变性
        NSMutableSet *mutableSet = [NSMutableSet set];
        //        添加
        [mutableSet addObject:@"123"];
        //        删除
        [mutableSet removeObject:@"123"];
        [mutableSet removeAllObjects];
    }
#endif
    return 0;
}


